package atomic;

import java.util.concurrent.atomic.LongAccumulator;
import java.util.concurrent.atomic.LongAdder;

/**
 * @author <a href='https://gitee.com/hzf2281'>codefish</a>
 * @version 1.0.0
 * @since 2022/08/21 下午 03:19
 */
public class LongAtomicOps {
    public static void main(String[] args) {
        //LongAdder初始值为1
        LongAdder longAdder = new LongAdder(); //0
        //调用increment执行++操作
        longAdder.increment();//1
        //LongAdder只支持加法操作
        longAdder.add(25); //26
        System.out.println(longAdder.sum());

        //LongAccumulator相比LongAdder功能更强大，体现在：
        // 1. 支持自定义运算，构造函数第一个参数为一个函数式接口，定义LongAccumulator包含的元素域第二个值的计算方法。
        // 该接口有left和right两个入参，调用时分别传入对象本身的值和accumulate()方法传人的值，并且获得计算结果并作为对象新的值
        // 2. 可自定义初始值，传入构造函数的第二个参数
        LongAccumulator longAccumulator = new LongAccumulator((x, y) -> x - y, 10);
        longAccumulator.accumulate(5);//5
        longAccumulator.accumulate(7);//-2
        System.out.println(longAccumulator.get());
    }
}
